package logicaDatos;

import java.sql.*;
import java.util.ArrayList;
import comun.ClaseConstantes.tablas;
import logicaNegocio.Administrador;
import logicaNegocio.Articulo;
import logicaNegocio.Calzado;
import logicaNegocio.Cliente;
import logicaNegocio.Complemento;
import logicaNegocio.Ropa;

public class GestorBD {

	private AccesoBD acceso;
	
	public GestorBD()
	{
		acceso = new AccesoBD();
	}
	
	
	public void addAdministrador(final Administrador a) 
	{
		acceso.connect();
		
		String addAdm= "INSERT INTO Administrador VALUES ('"+a.getNombre()+"', '"+a.getApellido()+"','"+a.getUsuario()+"','"+a.getContrasenia()+"','"+a.getBeneficio()+"');";
		
		try {
			acceso.add(addAdm);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
		
	}
	
	public ArrayList<Administrador> listaAdm()
	{
		acceso.connect();
		
		ArrayList<Administrador> listaAdm = new ArrayList<Administrador>();

		ResultSet rs;
		try {
			rs = acceso.list("Administrador");
	
			while (rs.next()) {
				final Administrador a = new Administrador(rs.getString("Nombre"), rs.getString("Apellido"),rs.getString("Usuario"), rs.getString("Contrasenia"), rs.getDouble("Beneficio"));//rs.getChar(contrasenia));?? contrasenia como coger?
				listaAdm.add(a);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		acceso.disconnect();
		
		return listaAdm;
	} 
	
	public void modifyAdministrador( Administrador a, String s) 
	{
		acceso.connect();
		
		String cond = "Usuario = '" + s+ "'";
		String mod = "Beneficio = " + a.getBeneficio() +  "";
				
		try {
			acceso.modify(tablas.Administrador, mod, cond);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void addCliente(final Cliente c) 
	{
		acceso.connect();
		
		String addCli= "INSERT INTO Cliente VALUES ('"+c.getNombre()+"', '"+c.getApellido()+"','"+c.getUsuario()+"','"+c.getContrasenia()+"');";
		
		try {
			acceso.add(addCli);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
		
	}
	
	public ArrayList<Cliente> listaCl()
	{
		acceso.connect();
		
		final ArrayList<Cliente> listaCl = new ArrayList<Cliente>();
	
		ResultSet rs;
		try {
			rs = acceso.list("Cliente");
	
			while (rs.next()) {
				final Cliente c = new Cliente(rs.getString("Nombre"), rs.getString("Apellido"),rs.getString("Usuario"), rs.getString("Contrasenia"));
				listaCl.add(c);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		acceso.disconnect();
		
		return listaCl;
	} 
	
	public void deleteCliente( Cliente c) 
	{

		acceso.connect();
	
		try {
			String borrar = "Usuario = '" + c.getUsuario()+ "'";
			acceso.delete(tablas.Cliente, borrar);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		acceso.disconnect();
	}
	
		
	public void addCalzado( Calzado cl)
	{
		acceso.connect();
		
		String addCal= "INSERT INTO Calzado VALUES ('"+cl.getNombre()+"', '"+cl.getPrecio()+"','"+ cl.getTalla()+"','"+cl.getDescrp()+"', '"+cl.getNumRef()+"', '"+cl.getTipoCz()+"','"+ cl.getTipoA()+"','"+cl.getCantidad()+"' , '"+cl.getOferta()+"', '"+cl.getColor()+"' , '"+cl.getUnidadesVendidas()+"');";
		
		try {
			acceso.add(addCal);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
		
	}
	
	public ArrayList<Articulo> listaCalzado() 
	{
		acceso.connect();
		
		ArrayList<Articulo> listaCalzado = new ArrayList<Articulo>();
		
		
		ResultSet rs;
		try {
			rs = acceso.list("Calzado");
	
			while (rs.next()) {
				 Calzado c = new Calzado(rs.getString("Nombre"), rs.getDouble("Precio"),  rs.getString("Talla"), rs.getString("Descripcion"), rs.getString("Num_ref"), rs.getString("Tipo"), rs.getString("TipoA"), rs.getInt("Cantidad"), rs.getString("Oferta"), rs.getString("Color"), rs.getInt("UnidadesVendidas"));//rs.getChar(contrasenia));?? contrasenia como coger?
				 listaCalzado.add(c);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
		acceso.disconnect();
		return listaCalzado;
	} 
	public void deleteCalzado ( Calzado cl) 
	{
		acceso.connect();
		String borrar = "Num_Ref = '" + cl.getNumRef()+ "'";
		try {
			acceso.delete(tablas.Calzado, borrar);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		acceso.disconnect();
	}
	
	public void modifyCalzado( Calzado cl, String s) 
	{
		acceso.connect();
		
		String cond = "Num_Ref = '" + s+ "'";
		String mod = "Cantidad = " + cl.getCantidad() + ", UnidadesVendidas = " +cl.getUnidadesVendidas() + "";
				
		try {
			acceso.modify(tablas.Calzado, mod, cond);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void addComplemento( Complemento cm) 
	{
		acceso.connect();
		
		String addComp= "INSERT INTO Complemento VALUES ('"+cm.getNombre()+"', '"+cm.getPrecio()+"','"+ cm.getTalla()+"','"+cm.getDescrp()+"', '"+cm.getNumRef()+"', '"+cm.getTipoCp()+"','"+ cm.getTipoA()+"','"+cm.getCantidad()+"' , '"+cm.getOferta()+"', '"+cm.getColor()+"' , '"+cm.getUnidadesVendidas()+"');";
		
		try {
			acceso.add(addComp);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
		
	}
	
	public ArrayList<Articulo> listaComp() 
	{
		acceso.connect();
		 ArrayList<Articulo> listaComp = new ArrayList<Articulo>();
		
		
		ResultSet rs;
		try {
			rs = acceso.list("Complemento");

			while (rs.next()) {
				 Complemento cm = new Complemento(rs.getString("Nombre"), rs.getDouble("Precio"),  rs.getString("Talla"), rs.getString("Descripcion"), rs.getString("Num_ref"), rs.getString("Tipo"), rs.getString("TipoA"), rs.getInt("Cantidad"), rs.getString("Oferta"), rs.getString("Color"), rs.getInt("UnidadesVendidas"));//rs.getChar(contrasenia));?? contrasenia como coger?
				 listaComp.add(cm);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
		
		
		return listaComp;
	} 
	public void deleteComplemento ( Complemento cm) 
	{
		
		acceso.connect();
		String borrar = "Num_Ref = '" + cm.getNumRef()+ "'";
		try {
			acceso.delete(tablas.Complemento, borrar);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
	}
	
	
	public void modifyComplemento( Complemento cm, String s) 
	{
		acceso.connect();
		
		String cond = "Num_Ref = '" + s+ "'";
		String mod = "Cantidad = " + cm.getCantidad() + ", UnidadesVendidas = " +cm.getUnidadesVendidas() + "";
		
				
		try {
			acceso.modify(tablas.Complemento, mod, cond);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void addRopa( Ropa rp)
	{
		acceso.connect();
		
		String addRop= "INSERT INTO Ropa VALUES ('"+rp.getNombre()+"', '"+rp.getPrecio()+"','"+ rp.getTalla()+"','"+rp.getDescrp()+"', '"+rp.getNumRef()+"', '"+rp.getTipoR()+"','"+ rp.getTipoA()+"','"+rp.getCantidad()+"' , '"+rp.getOferta()+"', '"+rp.getColor()+"' , '"+rp.getUnidadesVendidas()+"');";
		
		try {
			acceso.add(addRop);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		acceso.disconnect();
				
		
	}
	
	public ArrayList<Articulo> listaRopa()
	{
		acceso.connect();
		
		 ArrayList<Articulo> listaRopa = new ArrayList<Articulo>();
		
		
		ResultSet rs;
		try {
			rs = acceso.list("Ropa");

			while (rs.next()) {
				 Ropa r = new Ropa(rs.getString("Nombre"), rs.getDouble("Precio"),  rs.getString("Talla"), rs.getString("Descripcion"), rs.getString("Num_ref"), rs.getString("Tipo"), rs.getString("TipoA"), rs.getInt("Cantidad"), rs.getString("Oferta"), rs.getString("Color") , rs.getInt("UnidadesVendidas"));//rs.getChar(contrasenia));?? contrasenia como coger?
				listaRopa.add(r);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		
		acceso.disconnect();
		return listaRopa;
	} 
	public void deleteRopa ( Ropa rp)  
	{
		acceso.connect();
		String borrar = "Num_Ref = '" + rp.getNumRef()+ "'";
		try {
			acceso.delete(tablas.Ropa, borrar);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		acceso.disconnect();
	}
	
	public void modifyRopa( Ropa rp, String s)
	{
		acceso.connect();
		
		String cond = "Num_Ref = '" + s+ "'";
		String mod = "Cantidad = " + rp.getCantidad() + ", UnidadesVendidas = " +rp.getUnidadesVendidas() + "";
		
				
		try {
			acceso.modify(tablas.Ropa, mod, cond);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
		
}
